<?php

class TSession 
{
    // Expiration time for user's session
    var $sessionExpirationTimeSec            = 3600; // 1 Hour
    // Value for the session's cookie which is sent to the browser
    var $sessionName                         = 'AppSession';
    
    /***************************************************************************
    * internalStart
    ***************************************************************************/
    protected function internalStart()
    {
        // Reset the expiration time upon page load
        if ( isset( $_COOKIE[ $this->sessionName ] ) )
        {
            setcookie( $this->sessionName, $_COOKIE[ $this->sessionName ], time() + $this->sessionExpirationTimeSec );
        }
        
        $this->startSession();
        
        if ( !$this->sessionDataExists() )
        {
            $this->doOnSessionCreate();
        }
    }
    
    /***************************************************************************
    * startSession
    ***************************************************************************/
    private function startSession()
    {
        session_set_cookie_params( $this->sessionExpirationTimeSec );
        session_name( $this->sessionName );
        session_start();
    }
    
    /***************************************************************************
    * stopSession
    ***************************************************************************/
    function stopSession()
    {
        session_start();
        $_SESSION = array();
        if ( isset( $_COOKIE[ session_name() ] ) ) 
        {
            setcookie( session_name( $this->sessionName ), '', time() - 42000, '/' );
        }
        session_destroy();
    }
    
    /***************************************************************************
    * sessionDataExists
    ***************************************************************************/
    function sessionDataExists()
    {
        $Result = isset( $_SESSION ) && count( $_SESSION ) > 0;
        return $Result;
    }

    /***************************************************************************
    * doOnSessionCreate
    ***************************************************************************/
    protected function doOnSessionCreate()
    { // OVERRIDE ME
    }
    
    /***************************************************************************
    * __get
    ***************************************************************************/
    function __get( $aVarName ) 
    {
        $Result = $_SESSION[ $aVarName ];
        return $Result;
    }

    /***************************************************************************
    * __set
    ***************************************************************************/
    function __set( $aVarName, $aValue ) 
    {
        $_SESSION[ $aVarName ] = $aValue;
        return true;
    }
    
    /***************************************************************************
    * __isset
    ***************************************************************************/
    public function __isset( $aVarName )
    {
        return isset( $_SESSION[ $aVarName ] );
    }

    /***************************************************************************
    * __unset
    ***************************************************************************/
    public function __unset( $aVarName )
    {
        unset( $_SESSION[ $aVarName ] );
    }
    
    /***************************************************************************
    * setCryptKey
    ***************************************************************************/
    static public function setCryptKey( $aAlias, $aKey )
    {
        $_SESSION[ 'crypt' ][ $aAlias ] = $aKey;
    }
    
    /***************************************************************************
    * getCryptKey
    ***************************************************************************/
    static public function getCryptKey( $aAlias )
    {
        $Result = $_SESSION[ 'crypt' ][ $aAlias ];
        return $Result;
    }
}


?>